// 为了把地址信息 address 储存到vuex中，封装一个user.js 用来定义数据和方法

export default {
  // 开启命名空间
  namespaced: true,
  
  // 数据
  state: {
    // 收货地址
    // address: {}
    // 解析JSON格式的字符串并返回一个对象  从本地储存中获取指定的值 - address
    address: JSON.parse(uni.getStorageSync('address') || '{}')
  },
  
  // 方法
  mutations: {
    // 如果要更新收货地址时
    // 参数一是上方的state数据  参数二是传进来的新的收货地址
    updateAddress(state, address) {
      state.address = address
      
      // 2. 通过 this.commit() 方法，调用 m_user 模块下的 saveAddressToStorage 方法将 address 对象持久化存储到本地
      this.commit('m_user/saveAddressToStorage')
    },
    
    // 把address数据持久化储存到本地 mutations 的方法
    saveAddressToStorage(state) {
      // 调用uni的setStorageSync方法 将 data 存储在本地缓存中指定的 key 中，会覆盖掉原来该 key 对应的内容
      uni.setStorageSync('address', JSON.stringify(state.address))
    }
  },
  
  // 数据包装器
  // 为了提高代码的复用性，
  getters: {
    // 收货地址太长 需要拼接 所以可以用计算属性来拼接
    addstr(state) {
      if (state.address.provinceName = '') return ''
      
      // 否则就拼接 省 市 区等具体地址
      return state.address.provinceName + state.address.cityName + state.address.countyName + state.address.detailInfo
    }
  }
}